;	���������� �� ����� ������ (256 ����)
;	-------------------------------------
; ������: Disp_line, Send_crlf
;
Disp_sector:
	push	edx
	push	cx
	push	si	                    
	call	Clear_screen		;������� ������
	mov	si,ReferenceLine	;������� ������� ���������
	call	Outstring		;����� ���������
	call	Send_crlf		;������� ������ ������
	call	Send_crlf		; -"-
	call	Send_crlf		; -"-
	call	Send_crlf		; -"-
	xor	edx,edx			;������ Sector
	mov	cx,16			;����� ����� 16
.M:	call	Disp_line		;����� ������
	call	Send_crlf		;������� ������
	add	edx,16			;����� ������� ����� ��������� ������
	loop	.M			;�������� ����� �����
	pop	si
	pop	cx
	pop	edx
	ret
ReferenceLine	db	'F1-start|F2-record|F3-next|F4-edit|F5-previous|F6-arbitary|F10-end', '$'
;
;	��������� ��������� 16 ���� ������ � ���� ������
;			����������������� �����
;	------------------------------------------------
; �����: EDX - ����� ������� ����� ������ � Sector
; ������: Write_hex, Write_char
; ������: Sector
;
Disp_line:
	push	ebx
	push	cx
	push	edx              
	mov	ebx,edx			;� BX ����� ������� �����
	add	edx,[Address]    	;����� ������ �������
	call	Write_dword_hex		; ����� ������
	mov	dl,' '			;����� �� �����
	call	Write_char		; �������
	mov	cx,16			;������� ������
	push	ebx			;�������� ����� ������� �����
.M1:	mov	dl,[Sector+ebx]		;�������� ���� ����
	call	Write_byte_hex		;����� ������������������ �����
	mov	dl,' '			;����� �� �����
	call	Write_char		; �������
	inc	ebx			;������� �� ���������
	loop	.M1			; ������
	pop	ebx			;������� ����� ������� �����
	mov	cx,16			;������� ������
.M2:	mov	dl,[Sector+ebx]		;�������� ���� ����
	call	Write_char		;������� ������ �� �����
	inc	ebx			;������� �� ���������
	loop	.M2			; ������
	pop	edx
	pop	cx
	pop	ebx
	ret
;
;	�������� � ���������� Sector ��������� ������ �������� ������ ���������,
;			�������� 0 � ���������� Address
;	------------------------------------------------------------------------
;
Init_sector:
	mov	[Address],dword 0	;�������� 0 � ���������� Address
	call	Read_sector		;�������� ���������� ������� ������ � ������� 0
	call    Disp_sector		;������� ������ �� �����
	ret
;
;	�������� � ���������� Sector ���������� ������ �������� ������ ���������,
;		�������� ��������� ����� ����� ������� � ���������� Address
;	-------------------------------------------------------------------------
;
Prev_sector:
	push	ebx
	mov	ebx,[Address]		;�������� ����� � ������� BX
	or	ebx,0            	;���� ����� ����� 0
	je	.M			; �� ������ �� ������
	sub	ebx,100h         	;��������� �����
	mov	[Address],ebx		; �� 256
.M:	call	Read_sector     	;�������� ������ ������ � ����� �������
	call	Disp_sector		;������� ������ �� �����
	pop	ebx
	ret
;
;	�������� � ���������� Sector ��������� ������ �������� ������ ���������,
;		�������� ��������� ����� ����� ������� � ���������� Address
;	-------------------------------------------------------------------------
;
Next_sector:
	push	ebx
	mov	ebx,[Address]		;�������� ����� � ������� BX
	cmp	ebx,0FF000000h		;���� ����� ����� 65280
	je	.M			; �� ������ �� ������
	add	ebx,100h         	;����������� �����
	mov	[Address],ebx		; �� 256
.M:	call	Read_sector		;�������� ������ ������ � ����� �������
	call	Disp_sector		;������� ������ �� �����
	pop	ebx
	ret
;
;	�������� � ���������� Sector N-� ������ �������� ������ ���������,
;		�������� ��������� ����� ����� ������� � ���������� Address
;	-------------------------------------------------------------------
;
N_sector:
	push	edx
	call	Send_crlf		;������� ������
	mov	si,HeaderInputSector	;������� ���������
	call	Outstring		;����� ���������
	call	Read_N			;���� ������ �������
	shl	edx,8			;�������� ����� �� 8 ��������
	mov	[Address],edx		;�������� ����� �����
	call	Read_sector		;�������� ������ ������ � ����� �������
	call	Disp_sector		;������� ������ �� �����
	pop	edx
	ret
HeaderInputSector db	'Input number Sector: ', '$'
;
;	�������� � ���������� Sector ���������� ������� ������, ���������
;			����� �������� � ���������� Address
;	-----------------------------------------------------------------
;
Read_sector:
	push	ax
	push	cx
	push	esi
	push	edi		
	push	ebx			
	mov	esi,[Address]		;������ ����������
	mov	edi,Sector		;���� ����������
	mov	cx,256			;� �������� ����� ����
	xor	ebx,ebx
.L:	mov	al,[fs:esi+ebx]
	mov	[edi+ebx],al
	inc	ebx
	loop	.L
	pop	ebx			
	pop	edi
	pop	esi
	pop	cx
	pop	ax
	ret
;
;	������������ ���������� ���������� Sector � ������� ������
;	----------------------------------------------------------
;
Write_sector:
	push	ax
	push	cx
	push	esi
	push	edi		
	push	ebx			
	mov	esi,Sector		;������ ����������
	mov	edi,[Address]		;���� ����������
	mov	cx,256			;� �������� ����� ����
	xor	ebx,ebx
.L:	mov	al,[esi+ebx]
	mov	[fs:edi+ebx],al
	inc	ebx
	loop	.L
	pop	ebx			
	pop	edi
	pop	esi
	pop	cx
	pop	ax
	ret
%include	'Video_io.asm'	;������������� ��������	
%include	'Cursor.asm'	; -"-
%include	'Kbd_io.asm'	; -"-